<?xml version="1.0" encoding="UTF-8"?>
<schema targetNamespace="http://www.opengis.net/gml" xmlns:gml="http://www.opengis.net/gml" xmlns:sch="http://www.ascc.net/xml/schematron" xmlns="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified" version="3.0.1">
  <annotation>
    <appinfo source="urn:opengis:specification:gml:schema-xsd:feature:v3.0.1"/>
    <documentation>
     		      GML Feature schema. 		      
     		      Copyright (c) 2001-2002 OGC, All Rights Reserved. 
	      
    </documentation>
  </annotation>
  <!-- ============================================================== -->
  <!-- ==================        includes and imports  ======================= -->
  <!-- ============================================================== -->
  <include schemaLocation="geometryBasic2d.xsd"/>
  <include schemaLocation="temporal.xsd"/>
  <!-- ============================================================== -->
  <element name="_Feature" type="gml:AbstractFeatureType" abstract="true" substitutionGroup="gml:_GML"/>
  <!-- =========================================================== -->
  <complexType name="AbstractFeatureType" abstract="true">
    <annotation>
      <documentation> An abstract feature provides a set of common properties, including id, metaDataProperty, name and description inherited from AbstractGMLType, plus boundedBy.    A concrete feature type must derive from this type and specify additional  properties in an application schema. A feature must possess an identifying attribute ('id' - 'fid' has been deprecated).  </documentation>
    </annotation>
    <complexContent>
      <extension base="gml:AbstractGMLType">
        <sequence>
          <element ref="gml:boundedBy" minOccurs="0"/>
          <element ref="gml:location" minOccurs="0"/>
          <!-- additional properties must be specified in an application schema -->
        </sequence>
        <attribute name="fid" type="string">
          <annotation>
            <appinfo>deprecated</appinfo>
            <documentation>deprecated in GML version 3.0</documentation>
          </annotation>
        </attribute>
      </extension>
    </complexContent>
  </complexType>
  <!-- ============================================================== -->
  <!-- ===== property for feature association - by Value or by Reference ===== -->
  <element name="featureMember" type="gml:FeaturePropertyType"/>
  <element name="featureProperty" type="gml:FeaturePropertyType"/>
  <!-- ============================================================== -->
  <complexType name="FeaturePropertyType">
    <annotation>
      <documentation>Container for a feature - follow gml:AssociationType pattern.</documentation>
    </annotation>
    <sequence>
      <element ref="gml:_Feature" minOccurs="0"/>
    </sequence>
    <attributeGroup ref="gml:AssociationAttributeGroup"/>
  </complexType>
  <!-- ============================================================== -->
  <!-- ===== property for association of an array of features ===== -->
  <element name="featureMembers" type="gml:FeatureArrayPropertyType"/>
  <!-- =========================================================== -->
  <complexType name="FeatureArrayPropertyType">
    <annotation>
      <documentation>Container for features - follow gml:ArrayAssociationType pattern.</documentation>
    </annotation>
    <sequence>
      <element ref="gml:_Feature" minOccurs="0" maxOccurs="unbounded"/>
    </sequence>
  </complexType>
  <!-- ============================================================== -->
  <!-- =========== Bounded feature ========================= -->
  <complexType name="BoundedFeatureType" abstract="true">
    <annotation>
      <documentation> Makes boundedBy mandatory - used to build Feature Collections </documentation>
    </annotation>
    <complexContent>
      <restriction base="gml:AbstractFeatureType">
        <sequence>
          <element ref="gml:metaDataProperty" minOccurs="0" maxOccurs="unbounded"/>
          <element ref="gml:description" minOccurs="0"/>
          <element ref="gml:name" minOccurs="0" maxOccurs="unbounded"/>
          <element ref="gml:boundedBy"/>
          <element ref="gml:location" minOccurs="0"/>
        </sequence>
      </restriction>
    </complexContent>
  </complexType>
  <!-- =========================================================== -->
  <element name="_FeatureCollection" type="gml:AbstractFeatureCollectionType" abstract="true" substitutionGroup="gml:_Feature"/>
  <!-- ===========================================================   -->
  <complexType name="AbstractFeatureCollectionType" abstract="true">
    <annotation>
      <documentation> A feature collection contains zero or more features.  </documentation>
    </annotation>
    <complexContent>
      <extension base="gml:BoundedFeatureType">
        <sequence>
          <element ref="gml:featureMember" minOccurs="0" maxOccurs="unbounded"/>
          <element ref="gml:featureMembers" minOccurs="0"/>
        </sequence>
      </extension>
    </complexContent>
  </complexType>
  <!-- =========================================================== -->
  <element name="FeatureCollection" type="gml:FeatureCollectionType" substitutionGroup="gml:_Feature"/>
  <!-- =========================================================== -->
  <complexType name="FeatureCollectionType">
    <annotation>
      <documentation> Concrete generic feature collection.  </documentation>
    </annotation>
    <complexContent>
      <extension base="gml:AbstractFeatureCollectionType"/>
    </complexContent>
  </complexType>
  <!-- =========================================================== -->
  <element name="boundedBy" type="gml:BoundingShapeType"/>
  <!-- ====================================================================== -->
  <complexType name="BoundingShapeType">
    <annotation>
      <documentation>Bounding shape.</documentation>
    </annotation>
    <sequence>
      <group ref="gml:boundingShape"/>
    </sequence>
  </complexType>
  <!-- ============================================================== -->
  <group name="boundingShape">
    <choice>
      <element ref="gml:Envelope"/>
      <element ref="gml:Null"/>
    </choice>
  </group>
  <!-- =========================================================== -->
  <!-- ========   global element declarations ======================================= -->
  <element name="Box" type="gml:EnvelopeType" substitutionGroup="gml:Envelope">
    <annotation>
      <appinfo>deprecated</appinfo>
      <documentation>deprecated with GML version 3.0</documentation>
    </annotation>
  </element>
  <!-- =========================================================== -->
  <element name="EnvelopeWithTimePeriod" type="gml:EnvelopeWithTimePeriodType" substitutionGroup="gml:Envelope"/>
  <!-- ====================================================================== -->
  <complexType name="EnvelopeWithTimePeriodType">
    <annotation>
      <documentation>Envelope that includes also a temporal extent.</documentation>
    </annotation>
    <complexContent>
      <extension base="gml:EnvelopeType">
        <sequence>
          <element ref="gml:timePosition" minOccurs="2" maxOccurs="2"/>
        </sequence>
        <attribute name="frame" type="anyURI" use="optional" default="#ISO-8601"/>
      </extension>
    </complexContent>
  </complexType>
  <!-- ====================================================================== -->
  <!-- ============================================================== -->
  <element name="location" type="gml:LocationPropertyType" substitutionGroup="gml:_property"/>
  <!-- ============================================================== -->
  <complexType name="LocationPropertyType">
    <annotation>
      <documentation>generalised locator property  - follow gml:AssociationType pattern</documentation>
    </annotation>
    <sequence>
      <group ref="gml:locator" minOccurs="0"/>
    </sequence>
    <attributeGroup ref="gml:AssociationAttributeGroup"/>
  </complexType>
  <group name="locator">
    <choice>
      <element ref="gml:_Geometry"/>
      <element ref="gml:LocationKeyWord"/>
      <element ref="gml:LocationString"/>
    </choice>
  </group>
  <!-- ============================================================== -->
  <element name="LocationKeyWord" type="gml:CodeType"/>
  <element name="LocationString" type="gml:StringOrRefType"/>
  <!-- =========================================================== -->
  <element name="priorityLocation" type="gml:PriorityLocationPropertyType" substitutionGroup="gml:location"/>
  <!-- ============================================================== -->
  <complexType name="PriorityLocationPropertyType">
    <annotation>
      <documentation>G-XML component</documentation>
    </annotation>
    <complexContent>
      <extension base="gml:LocationPropertyType">
        <attribute name="priority" type="string" use="optional"/>
      </extension>
    </complexContent>
  </complexType>
  <!-- ============================================================== -->
  <!-- common aliases for geometry properties -->
  <element name="centerOf" type="gml:PointPropertyType" substitutionGroup="gml:pointProperty"/>
  <element name="position" type="gml:PointPropertyType" substitutionGroup="gml:pointProperty"/>
  <element name="edgeOf" type="gml:CurvePropertyType" substitutionGroup="gml:curveProperty"/>
  <element name="centerLineOf" type="gml:CurvePropertyType" substitutionGroup="gml:curveProperty"/>
  <element name="extentOf" type="gml:SurfacePropertyType" substitutionGroup="gml:surfaceProperty"/>
  <element name="coverage" type="gml:SurfacePropertyType" substitutionGroup="gml:surfaceProperty">
    <annotation>
      <appinfo>deprecated</appinfo>
      <documentation>deprecated in gml 3.0</documentation>
    </annotation>
  </element>
  <!-- ============================================================== -->
</schema>